在上一篇文章中,我們已經記錄了「PChome 24h購物」的 App ID。本篇將聚焦在 App Store 的評論資料爬取。
由於 Apple App Store 的資料抓取不像 Google Play 那麼直覺,這部分會稍微複雜一些。過去社群曾經提供過 app-store-scraper
這類套件,但目前實測已經無法使用。因此,本篇採用 iTunes RSS Feed 的方式來獲取評論資料。
目標網址格式如下:https://itunes.apple.com/{country}/rss/customerreviews/page={page}/id={appid}/sortBy=mostRecent/json
{country}
:代表國家代碼,例如 tw
代表台灣。{page}
:評論的頁數,每頁大約 50 筆評論。{appid}
:應用程式的 ID,例如 452668231
(PChome 24h購物)。範例網址:
👉 https://itunes.apple.com/tw/rss/customerreviews/page=1/id=452668231/sortBy=mostRecent/json
⚠️ 限制提醒:此方式最多僅能爬取 10 頁評論(約 500 筆)。若將 page=11
,伺服器只會回傳最多第 10 頁的資料。
接下來,我們先匯入必要套件,並設定 App ID、國家代碼與存放評論的空 list
。
import pandas as pd
import numpy as np
import requests
import json
from google_play_scraper import app, reviews_all
import re
import emoji
import os
from datetime import datetime
import pytz
# App Store 應用程式設定
appid = 452668231
country = "tw"
reviews = []
# 逐頁爬取 (最多 10 頁)
for i in range(1, 11):
url = f"https://itunes.apple.com/{country}/rss/customerreviews/page={i}/id={appid}/sortBy=mostRecent/json"
response = requests.get(url)
data = response.json()
data
下方為爬出後的結果,可以觀察其 JSON 格式,裡面有些欄位是我們想要爬取的資料,但包含在 label 裡面。
由於原始 JSON 的層級結構較深(例如 entry['title']['label']
),我們需要將有用的 label 值抽取出來,存放到結構化的 list 中,方便後續轉換成 DataFrame 進行分析。
import pandas as pd
import numpy as np
import requests
import json
from google_play_scraper import app, reviews_all
import re
import emoji
import os
from datetime import datetime
import pytz
# App Store 應用程式設定
appid = 452668231 # PChome 24h購物
country = "tw" # 台灣
reviews = [] # 存放評論的 list
# 逐頁爬取 (最多 10 頁)
for i in range(1, 11):
url = f"https://itunes.apple.com/{country}/rss/customerreviews/page={i}/id={appid}/sortBy=mostRecent/json"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
# 確保資料中有 feed 與 entry
if 'feed' in data and 'entry' in data['feed']:
for entry in data['feed']['entry']:
review = {
'id': entry['id']['label'], # 評論 ID
'rating': entry['im:rating']['label'], # 星等
'title': entry['title']['label'], # 標題
'content': entry['content']['label'], # 內容
'date': entry['updated']['label'], # 日期
'appVersion': entry['im:version']['label'] # App 版本
}
reviews.append(review)
else:
print(f"⚠️ 第 {i} 頁評論抓取失敗,狀態碼:{response.status_code}")
reviews
當程式執行後,reviews
這個 list 就會存放我們所需的評論資料。以下是部分 JSON 結構對應到的欄位:
當我們完成評論爬取後,所有的評論都被存放在 reviews
這個 list 之中。由於每一筆評論已經是 dictionary 的形式,因此只需要使用 pandas.DataFrame
就能快速轉換為表格格式,方便後續進行清理與分析。
# 將評論 list 轉換成 DataFrame
df_app_store = pd.DataFrame(reviews)
# 檢視全部資料
df_app_store
到這裡,我們已經能夠透過 iTunes RSS Feed 成功抓取 App Store 的評論資料。雖然有 最多 10 頁的限制,但已經足以簡單應用在一般的情感分析、關鍵字分析或版本迭代追蹤上。
在下一篇文章中,我將示範如何爬取 Google Play 評論的資料 ✨